10 REM USE THIS PROGRAM TO LEARN HOW 20 REM CREATE AND USE RELATIVE FILES. 30 REM IT IS FLEXIBLE ENOUGH FOR YOU 40 REM TO CUSTOMIZE IT FOR YOUR USE. 50 REM 55 POKE53280,0:POKE53281,0 75 GOSUB1460 80 LL$=CHR$(13) :REM THIS IS THE FIELD DELIMITER USED WHEN WRITING RECORDS 90 INPUT"[155] WHAT IS THE FILE NAME";NM$: REM MAXIMUM 16 CHARACTER NAME. 100 IFLEN(NM$)>0ANDLEN(NM$)<17THEN120 110 PRINT"[145][145][145]":GOTO90 120 INPUT"[155] ON WHAT DEVICE NUMBER";DV 130 OPEN15,DV,15,"I0": REM INITIALIZE THE DISK DRIVE. 140 OPEN 8,DV,8,"0:"+(NM$) 150 INPUT#15,E,E$,A,B :REM READ THE ERROR CHANNEL. 160 IF E=62 THEN 200 170 IF E=0 THEN 180:PRINTE,E$,A,B:GOTO 1270 180 PRINT"[155] (FILE EXISTS)" 190 GOTO 280 200 PRINT"[155] (NEW FILE)" 210 CLOSE8 220 INPUT"[155] HOW MANY CHARACTERS IN EACH RECORD";LN :REM MAXIMUM 254. 230 LN=INT(LN):IFLN>0ANDLN<255THEN250 240 PRINT"[145][145][145]":GOTO220 250 OPEN8,DV,8,"0:"+(NM$)+",L,"+CHR$(LN) 260 GOSUB 1110 280 PRINT"[155] DO YOU WANT TO : " 290 PRINTSPC(7)"R[155]EAD A RECORD" 300 PRINTSPC(7)"W[155]RITE A RECORD" 310 PRINTSPC(7)"S[155]ET UP A FILE" 320 PRINTSPC(7)"Q[155]UIT " 330 PRINT 340 A$="" 350 GETA$ 360 IF A$="R" THEN 420 370 IF A$="W" THEN 640 380 IF A$="S" THEN 890 390 IF A$="Q" THEN 1050 400 GOTO350 410 : 420 REM THIS SECTION POSITIONS TO AND READS A RECORD. 425 GOSUB 1460:PRINT 430 INPUT"[155]READ WHAT RECORD NUMBER";RN 440 GOSUB1060 :REM CALCULATE THE LOW BYTE/HIGH BYTE POINTER. 450 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1) :REM POSITION COMMAND 460 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 470 IF E=50 THENPRINT"[155]RECORD NUMBER TOO LARGE":GOTO560 480 INPUT#8,AA$,BB$,CC$,DD$,EE$ :REM READ IN THE FIELDS. 490 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 500 PRINT"[155]RECORD NUMBER";RN;"[157] CONTAINS:":PRINT 510 PRINTSPC(8)"[155]NAME: ";AA$ 520 PRINTSPC(5)"[155]ADDRESS: ";BB$ 530 PRINTSPC(8)"[155]CITY: ";CC$ 540 PRINTSPC(7)"[155]STATE: ";DD$ 550 PRINTSPC(4)"[155]ZIP CODE: ";EE$ 560 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1):REM REPOSIT'N FOR SAFETY 570 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 580 PRINT"[155]READ ANOTHER RECORD?";:A$="" 590 GETA$:IF (A$<>"Y") AND (A$<>"N") THEN 590 600 PRINT 610 IF A$="Y"THENGOTO425 620 GOSUB1460:GOTO280 :REM DO MAIN MENU 630 : 640 REM THIS SECTION POSITIONS TO AND WRITES A RECORD. 645 GOSUB1460:PRINT 650 INPUT"[155]WRITE WHAT RECORD NUMBER";RN:PRINT 660 INPUT"[155] NAME: ";AA$ :REM CHANGE THE PROMPTS TO ASK FOR DATA NEEDED 670 INPUT"[155] ADDRESS: ";BB$ :REM IN YOUR PARTICULAR APPLICATION. 680 INPUT"[155] CITY: ";CC$ :REM ANY NUMBER OF FIELDS CAN BE USED AS LONG AS 690 INPUT"[155] STATE: ";DD$ :REM THEY FIT WITHIN THE RECORD LENGTH YOU 700 INPUT"[155] ZIP CODE: ";EE$ :PRINT:REM SPECIFIED WHEN CREATING THE FILE. 710 RC$=AA$+LL$+BB$+LL$+CC$+LL$+DD$+LL$+EE$ 720 REM RC$ IS THE STRING CONTAINING ALL THE FIELDS FOR THE RECORD. 730 REM REMEMBER THE MAX LENGTH FOR RC$ IS 254 CHARACTERS. 740 GOSUB1060 :REM CALCULATE THE LOW BYTE/HIGH BYTE POINTER. 750 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1) :REM POSITION COMMAND 760 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 770 IF E=50 THENPRINT"[155]THE DOS WILL EXPAND THE FILE NOW" 780 PRINT#8,RC$ :REM WRITE THE RECORD 790 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 800 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1) :REM REPOSIT'N FOR SAFETY 810 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 820 PRINT 830 PRINT"[155]WRITE ANOTHER RECORD?";:A$="" 840 GETA$:IF (A$<>"Y") AND (A$<>"N") THEN 840 860 IF A$="Y"THEN645 870 GOSUB1460:GOTO280 :REM DO MAIN MENU 880 : 890 REM THIS SECTION POSITIONS TO AND WRITES THE HIGHEST RECORD NUMBER. 900 REM ALTHOUGH NOT ENTIRELY NECESSARY, WRITING AND UPDATING LONG FILES 910 REM IS SPEEDED WHEN THIS PROCEDURE IS USED. THIS WILL CAUSE THE 920 REM DOS SIDE SECTOR LIST TO BE CREATED ENTIRELY AT THE START RATHER 930 REM THAN BEING APPENDED FOR EACH NEW HIGHER RECORD NUMBER. 940 PRINT"[155]WHAT IS THE HIGHEST RECORD NUMBER" 950 INPUT"[155]YOU WANT TO USE";RN 960 GOSUB1060 :REM CALCULATE THE LOW BYTE/HIGH BYTE POINTER. 970 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1) :REM POSITION COMMAND 980 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 990 IF E=50 THENPRINT"[155]THE DOS WILL EXPAND THE FILE NOW" 1000 PRINT#8,CHR$(255) :REM 1010 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 1020 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1) :REM REPOSIT'N FOR SAFETY 1030 GOSUB 1110 :REM CHECK THE ERROR CHANNEL 1040 GOTO280 :REM GO TO THE MENU 1050 CLOSE8:CLOSE15:END 1060 REM THIS SUBROUTINE CALCULATES THE RECORD NUMBER POINTER 1070 REM IN THE LOW BYTE/HIGH BYTE FORMAT. 1080 REM RN (RECORD NUMBER) IS USED TO CALCULATE RL AND RH. 1090 RH=INT(RN/256):RL=RN-(256*RH) : REM RL IS LOW -- RH IS HIGH. 1100 RETURN 1110 REM THIS IS THE DISK DRIVE ERROR CHECKING SUBROUTINE. 1120 INPUT#15,E,E$,A,B :REM READ THE ERROR CHANNEL. 1130 IF E=0 THEN RETURN :REM THERE IS NO ERROR IF E=0. 1140 REM E=50 (RECORD NOT PRESENT) ANY TIME A RECORD NUMBER POINTER IS 1150 REM POSITIONED BEYOND THE CURRENT HIGHEST RECORD NUMBER. 1160 IF E=50 THEN RETURN 1170 IF E<>51 THEN 1220 1180 PRINT:PRINT"[155]ERROR-51, RECORD TOO LONG." 1190 PRINT"[155](RETURN COUNTS AS A CHARACTER)" 1200 GOSUB 1280 1210 RETURN 1220 PRINT"[155]THERE IS AN I/O PROBLEM" 1230 PRINT"ERROR NUMBER IS";E,E$ 1240 PRINT"AT TRACK";A;" SECTOR";B 1250 IF E=70 THENPRINT"[155]MAKE SURE YOU INPUT THE CORRECT RECORD" 1260 IF E=70 THENPRINT"[155]LENGTH FOR AN EXISTING FILE NAME." 1270 CLOSE8:CLOSE15:END 1280 PRINT"[155]COMPUTING ALLOWABLE RECORD LENGTH":PRINT" (PLEASE WAIT...)" 1290 IF LN<>0 THEN 1330 1300 CLOSE8 1310 FOR LN=1 TO 254:OPEN8,DV,8,"0:"+(NM$)+",L,"+CHR$(LN):INPUT#15,E:IFE=0THEN1330 1320 CLOSE 8:NEXT LN:PRINT"[155]UNABLE TO COMPUTE RECORD LENGTH!":GOTO1270 1330 PRINT"[145] " 1340 PRINT"[145][155]ALLOWABLE RECORD LENGTH = ";LN 1350 RETURN 1450 REM TITLE SUBROUTINE 1460 PRINT"[147][155] [192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]" 1465 PRINTSPC(6)"[159] RELATIVE FILE DEMO " 1470 PRINTSPC(6)"(NAME AND ADDRESS FILE)" 1475 PRINT"[155] [192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]" 1480 RETURN